#include"RBTree.h"


template<class K, class V>
class map
{
public:	
	struct MapKeyOfT
	{
		const K& operator()(const pair<K, V>& kv)
		{
			return kv.first;
		}
	};

	//关于map的拷贝构造：
	//map不用写拷贝构造，实现红黑树的拷贝构造就可以了
	//因为编辑器生成的默认构造：内置类型不处理，自定义类型调用它自己的构造。

	typedef typename  RBTree<K, pair<K, V>, MapKeyOfT>::iterator iterator;
	typedef typename  RBTree<K, pair<K, V>, MapKeyOfT>::const_iterator const_iterator;

	//insert
	pair<iterator, bool> insert(const pair<K, V>& kv)
	{
		return _tree.insert(kv);
	}
	//begin
	iterator begin()
	{
		return _tree.begin();
	}
	//end
	iterator end()
	{
		return _tree.end();
	}
	//operator[]
	V& operator[](const K& key)
	{
		pair<iterator, bool> ret = _tree.insert(make_pair(key, V()));
		return ret.first->second;
	}
	//find
	iterator find(const K& key)
	{
		return _tree.Find(key);
	}
private:
	RBTree<K, pair<K, V>, MapKeyOfT> _tree;
};